3811
16159
關閉。這個問題需要細節或明確性。它當前不接受答案。
想改善這個問題嗎?添加細節並通過編輯此帖子來澄清問題。
1年前關閉。
改善這個問題
我正在做一些代碼挑戰,我想通過指定起始索引並從起始索引僅獲取第一個(3個或可以是任意長度)值來從數組中獲取前三個值。
我試過了這段代碼,它可以正常工作,但是代碼結構太長,因此如何使它更短,以便於理解。
整數n = 10;
雙重簽名=新的double [] {1,1,1};
double [] ret =新的double [n];
雙和= 0;
ret [0] =簽名[0];
ret [1] =簽名[1];
ret [2] =簽名[2];
int x,i;
對於(i = 0; i 
                                
使用LINQ,您可以嘗試如下操作:
var值= array.Skip(索引)
。取(n)
.ToArray();
其中index是第一個項目的索引,n是要選擇的項目數。
例如。 https://dotnetfiddle.net/Pk1rwY
作為旁注。使用LINQ並不意味著您的代碼會更快。它將更加緊湊/可讀,等等。為了評估代碼的性能,您必須使用BenchmarkDotNet之類的東西。
|
沒有Linq解決方案:
私有靜態T [] Extract (T []源,int fromIndex,int長度){
如果(null ==源)
拋出新的ArgumentNullException(nameof(source));
否則(fromIndex <0)
拋出新的ArgumentOutOfRangeException(nameof(fromIndex),
“ From Index必須為非負數”);
否則(長度<0)
拋出新的ArgumentOutOfRangeException(nameof(length),
“長度必須為非負數”);
if(fromIndex> = source.Length || length == 0)
返回新的T [0];
T []結果=新的T [Math.Min(length,source.Length-fromIndex)];
Array.Copy(source,fromIndex,result,0,result.Length);
返回結果;
}
然後
double []簽名=新的double [] {0,1,2,3,4,5};
double [] ret = Extract(簽名,3,2);
Console.Write(string.Join(“,”,ret));
結果:
3 4
|
根據您的問題,您需要利用.Take和.Skip運算符。
var result = array.Skip(startingIndex).Take(numberOfElements);
因此,從您的代碼看來,您正在嘗試做一些不同的事情,即求和元素。 .Sum運算符可能對您有幫助。
|
不是您要找的答案?瀏覽標記為c#數組linq的其他問題,或詢問您自己的問題。